Automatisches Eingabefeld [SAPGUI]

In der SE80 gibt es das Feld bereits lange und heute ist es mir wieder in der SE16T, der neuen Suchfunktion für Tabellen, Transaktionen und vieles Anderes, untergekommen.

Das Eingabefeld, das mit Klasse CL_GUI_INPUT_FIELD programmiert werden kann, ermöglicht es, eine Aktion auszuführen, ohne dass die AnwenderIn extra auf ENTER drücken muss. Ideal für die Einschränkung von Suchergebnissen.

Wie das funktioniert, zeige ich dir an dem kleinen Demoprogramm, in dem die Ergebnisliste direkt bei der Eingabe entsprechend eingeschränkt wird.

Technik

Um das Eingabefeld benutzen zu können, braucht man – wie bei fast allen GUI-Controls – einen Container. An diesen Container wird die Klasse CL_GUI_INPUT_FIELD angebunden. Bei der Instanziierung gibt man an, ob die Funktion AUTO SUBMIT aktiviert werden soll oder nicht. Dann setzt man den Handler für das Ereignis SUBMIT und kann hier entsprechende Aktionen durchführen. Irritierenderweise gibt es auch ein Ereignis AUTO_SUBMIT, das aber anscheinend nicht verwendet wird.

Coding

REPORT.

PARAMETERS p_test TYPE text80.

CLASS input DEFINITION.
  PUBLIC SECTION.
    METHODS init.

  PRIVATE SECTION.
    METHODS on_submit FOR EVENT submit OF cl_gui_input_field IMPORTING input.
    DATA salv          TYPE REF TO cl_salv_table.
    DATA plants        TYPE STANDARD TABLE OF t001w WITH DEFAULT KEY.
    DATA docker_search TYPE REF TO cl_gui_docking_container.
    DATA docker_salv   TYPE REF TO cl_gui_docking_container.
    DATA input         TYPE REF TO cl_gui_input_field.
ENDCLASS.

CLASS input IMPLEMENTATION.
  METHOD init.
    docker_salv    = NEW #( ratio = 95 side = cl_gui_docking_container=>dock_at_bottom ).
    docker_search  = NEW #( ratio = 5 side = cl_gui_docking_container=>dock_at_bottom ).
    input = NEW #(
        parent               = docker_search
        input_prompt_text    = 'input_prompt_text'
        label_text           = 'Plant'
        label_width          = 40
        activate_history     = abap_true
        activate_find_button = abap_true
        button_icon_info     = icon_search
        button_tooltip_info  = 'Enter plant name to filter values'
        activate_auto_submit = abap_true
        default_text         = 'default_text' ) .
    SET HANDLER on_submit FOR input.
    cl_gui_container=>set_focus( input ).

    SELECT * FROM t001w INTO TABLE @plants.

    TRY.
        cl_salv_table=>factory(
          EXPORTING
            r_container    = docker_salv
          IMPORTING
            r_salv_table   = salv
          CHANGING
            t_table        = plants ).
        salv->display( ).
      CATCH cx_salv_msg.
    ENDTRY.

  ENDMETHOD.
  METHOD on_submit.
    DATA(filters) = salv->get_filters( ).
    filters->remove_filter( columnname = 'NAME1' ).
    IF input IS NOT INITIAL.
      TRY.
          filters->add_filter(
            columnname = 'NAME1'
            sign       = 'I'
            option     = 'CP'
            low        = |*{ input }*| ).
        CATCH cx_salv_not_found cx_salv_data_error cx_salv_existing.
      ENDTRY.
    ENDIF.
    salv->refresh( ).

  ENDMETHOD.
ENDCLASS.

INITIALIZATION.
  NEW input( )->init( ).
Enno Wulff
Letzte Artikel von Enno Wulff (Alle anzeigen)